##

nameserver root zone

How Domain Name Servers Work
How the Domain Name System (DNS) Works

区域文件

要理解不同的 DNS 记录,首先必须了解区域文件是什么?

区域文件
区域文件是名称服务器存储其所知道的域名的信息的方式。名称服务器知道的每个域名都存储在区域文件中。对于名称服务器来说,大多数请求都不能在它自己服务器中找到区域文件。

如果它被配置成可以递归查询,如解析名称服务器,那它会递归找到结果并返回。否则,它会告诉请求者方下一步到哪里查询。

名称服务器具有的区域文件越多,它能够权威回答的请求越多。

解析过程

DNS地址解析器的核心功能能

  • gethostbyname 主机名->ip
  • gethostbyaddr ip-主机名

gethostbyname 主机名–>ip

DNS服务器在名称解析过程中正确的查询顺序为:

本地缓存记录→区域记录→根域名服务器→转发域名服务器

具体步骤如下:

  1. 客户机提交域名解析请求,并将该请求发送给本地域名服务器
  2. 当本地的域名服务器收到请求后,就先查询本地缓存。如果有查询的DNS信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器
  3. 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
  4. 本地服务器再向返回的域名服务器发送请求。
  5. 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回本地域名服务器查询结果,否则通知本地域名服务器下级的域名服务器的地址。
  6. 本地域名服务器将查询请求发送给下级的域名服务器的地址,直到获取查询结果。
  7. 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机,完成解析过程。

通常情况下,我们是先设定DNS解析规则,然后ISP(供应商)依据指定的解析规则进行DNS解析。同样,我们通过测试解析结果,也可以反推DNS解析规则。本文以百度首页为例,分析其DNS解析规则。

域名的层级

本机只向自己的DNS服务器查询,dig命令有一个@参数,显示向其他DNS服务器查询的结果。

DNS服务器怎么会知道每个域名的IP地址呢?答案是分级查询。

举例来说,www.example.com真正的域名是www.example.com.root,简写为www.example.com.。因为,根域名.root对于所有域名都是一样的,所以平时是省略的。

根域名的下一级,叫做”顶级域名”(top-level domain,缩写为TLD),比如.com、.net;再下一级叫做”次级域名”(second-level domain,缩写为SLD),比如www.example.com里面的.example,这一级域名是用户可以注册的;再下一级是主机名(host),比如www.example.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。

流程

因为DNS系统是分层的,每个DNS只知道自己所管理的域,并不知道其他域。我的电脑DNS服务器设置为8.8.8.8,当我要解析www.zhihu.com的时候,假如8.8.8.8这台DNS服务器并没有缓存关于www.zhihu.com的信息,那么8.8.8.8就要向13台根服务器查询,这13台服务器也不知道www.zhihu.com的IP,但是它知道.com,.net等这些顶级域的DNS的IP地址,于是告诉8.8.8.8向这些顶级域的服务器去查询www.zhihu.com的信息,.com再告诉8.8.8.8要向zhihu.com的DNS服务器查询www这台主机的IP地址,最终才能解析www.zhihu.com。所以在目前来说(.)是整个DNS系统的核心,在DNS系统里面是必须存在的,如果没有(.),DNS的层级结构就被破坏的。

https://www.zhihu.com/question/21499001/answer/18432636

其他

ICANN拒绝谷歌将.search变成无点顶级域名

非常好的文章–http://colobu.com/2016/09/29/more-about-dns/

权威DNS

权威DNS是经过上一级授权对域名进行解析的服务器,同时它可以把解析授权转授给其他人,如COM顶级服务器可以授权xxorg.com这个域名的的权威服务器为NS.ABC.COM,同时NS.ABC.COM还可以把授权转授给NS.DDD.COM,这样NS.DDD.COM就成了ABC.COM实际上的权威服务器了。平时我们解析域名的结果都源自权威DNS。比如xxorg.com的权威DNS服务器就是dnspod的F1G1NS1.DNSPOD.NET和F1G1NS2.DNSPOD.NET。

从字面意思也可以看出,权威就是该域名及下级域名的“说了算”的服务器;在权威上可以设置,修改,删除该区域内的解析记录, 而非权威DNS只能是查询。

Local DNS

Local DNS 也是和我们日常上网接触最多的DNS包括你的服务提供商(ISP)分配给你的DNS(一般为两个),或者接下来讲到的公共DNS。又因为填写在你的本地电脑上,所以也称为Local DNS。

公共DNS

公共DNS不是:

  • 不是根服务器
  • 不是权威dns托管商,不提供域名注册等服务,比如万网和DNSpod
  • 不是权威dns,不针对个别域名进行解析
  • 公共DNS服务的特点就是服务的域名数量巨大,用户数多,同时要求具有安全性和抗攻击性,低延迟(响应快),无拦截(无广告)以及对解析成功率要求非常的高。
1
2
3
4
5
6
7
8
9
10
Google DNS:	8.8.8.8	8.8.4.4
OpenDNS: 208.67.222.222 208.67.220.220
V2EX DNS: 199.91.73.222 178.79.131.110
OpenerDNS: 42.120.21.30 (无添加剂)
香港: 205.252.144.228 202.181.224.2
澳门:202.175.3.8 202.175.3.3
台湾: 168.95.192.1 168.95.1.1
114DNS: 114.114.114.114,114.114.115.115
阿里DNS: 223.5.5.5,223.6.6.6
百度DNS: 180.76.76.76

用114DNS真的会被嵌广告

递归DNS

就是local dns。递归DNS可以理解为是一种功能复杂些的resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNSNS如8.8.8.8即这里所说的递归DNS。

递归服务器怎么知道根权威服务器的地址?很简单,在递归服务器上都保存有一份根服务器的地址列表,如上面表格列出的根服务器的地址。

递归服务器每次查询域名都要向根那里找权威服务器吗?不是的,一旦成功一次,递归服务器就会把权威服务器列表缓存下来(如COM顶级服务器列表可以缓存48小时)。

根域名服务器

一般说的13个根DNS服务器,指的是逻辑上有13个,而不是物理上13个服务器。

所有 root DNS的坐标:http://root-servers.org/ 。截至2014年10月,全球有504台根服务器,被编号为A到M共13个标号。

中国大陆在北京有三台编号为L的镜像,编号为F、I、J的镜像各一台,共6台;香港有编号为D、J的镜像各2台,编号为A、F、I、L的镜像各一台,共8台;台湾则有编号为F、I、J各一台,共3台。(镜像技术)

值的注意的是,在中国的只是根服务器的镜像,而不是根服务器的管理者,没有控制权。而且一经发现镜像服务器频繁出错,管理者有权将这个镜像踢出路由表。2010年就发生过此事。

为什么不能在中国设立第十四个根域名服务器

https://commondatastorage.googleapis.com/letscorp_archive/archives/73147

美国放松根域名服务器管控:不会彻底放手,但中国应抓住契机

为什么 DNS 根服务器只有 13 个 IP

为什么中国不建立根服务器?

一个IP如何实现全球部署? 任播(Anycast)技术

这是网络层的技术,详见网络层

通常一个IP都是对应一台通讯主机。
谷歌DNS服务8.8.8.8也是一台主机吗?根域名服务器只有13台吗?如何实现一个IP却全球部署?

虽然IP地址相同,但是服务器确可能有多台。

。大部分借由任播(Anycast)技术,编号相同的根服务器使用同一个IP,504台根服务器总共只使用13个IP,因此可以抵抗针对其所进行的分布式拒绝服务攻击(DDoS)。
在IP网络上通过一个Anycast地址标识一组DNS服务群,访问该地址的报文可以被IP网络路由到这一组DNS群的任何一台主机上,因此不同区域的用户会被路由到最近的服务器。

任播Anycasting最初是在RFC1546中提出并定义的,它的最初语义是,在IP网络上通过一个Anycast地址标识一组提供特定服务的主机,同时服务访问方并不关心提供服务的具体是哪一台主机(比如DNS或者镜像服务),访问该地址的报文可以被IP网络路由到这一组目标中的任何一台主机上,它提供的是一种无状态的、尽力而为的服务。

DNS劫持也是类似的原理吗?假装IP是8.8.8.8

如何查询8.8.8.8背后有哪些ip提供服务?

https://www.v2ex.com/t/259939

原理

DNS劫持 DNS污染

指的是用户访问一个地址,国内的服务器(非DNS)监控到用户访问的已经被标记地址时,服务器伪装成DNS服务器向用户发回错误的地址的行为。 为了减免网络上的交通,一般的域名都会把外间的域名服务器数据暂存起来,待下次有其他机器要求解析域名时,可以立即提供服务。一旦有关网域的局域域名服务器的缓存受到污染,就会把网域内的电脑导引往错误的服务器或服务器的网址。

某个国家出现过多次的DNS污染, 参看知乎。

8.8.8.8告诉我youtube网站的IP是1.2.3.4。我是该怀疑谁?

说明你被劫持了

如果traceroute 8.8.8.8时,从国内ip直接跳到8.8.8.8,那极可能是运营商自己搞的假服务器,中国移动的宽带,基本上将网上公开的公众dns都搞了个假的,目的就是完全劫持网内的dns查询。

我假装我是8.8.8.8不行吗?
你假装真不行,运营商假装才行。有的地区的运营商是会劫持8.8.8.8到它的服务器的

如何检查DNS是否被劫持

DNS劫持是什么原理

DNS缓存

查询DNS的时候可能会有多个地方存在缓存:

浏览器 DNS缓存
Java DNS缓存
OS DNS缓存
Local DNS缓存